from functools import lru_cache
from host.models import PkeyModel


class AppSetting:
    keys = ('public_key', 'private_key',)

    # 由于我们可能经常会执行这个get操作，所以我们使用了django的缓存机制，对方法的结果进行缓存，第二次调用 get()方法 时，并没有真正执行方法，而是直接返回缓存的结果，参数maxsize为最多缓存的次数，如果为None，则无限制，设置为2n时，性能最佳
    @classmethod
    @lru_cache(maxsize=64)
    def get(cls, key):  # public_key
        info = PkeyModel.objects.filter(key=key).first()
        if not info:
            raise KeyError(f'没有这个 {key!r}')
        return info.value

    @classmethod
    def set(cls, key, value, desc=None):  # public_key,  ('public_key', 'private_key',)
        if key in cls.keys:
            PkeyModel.objects.update_or_create(key=key, defaults={'value': value, 'desc': desc})
        else:
            raise KeyError('key数据不正常')

    '''
        id key              value                              desc
        1  public_key       ssh-ras aj;sdjfoajsdfjasdjf        asdf
        2  private_key      asodjfpoasjdpfjapsdjf              123 

        get('public_key').value()  -- ssh-ras aj;sdjfoajsdfjasdjf     

    '''


